package cn.bqjr.eily.samples.facade;

import cn.bqjr.eily.samples.entity.po.Menu;
import cn.bqjr.eily.samples.entity.vo.UserVO;

import java.util.List;
import java.util.Set;

public interface IUserFacade {
    /**
     * 剔除指定用户会话
     * @param userId
     * @return
     */
    boolean kickoutUserByUserId(Long userId);

    /**
     * 剔除指定用户会话
     * @param loginId
     * @return
     */
    boolean kickoutUserByLoginId(String loginId);

    /**
     * 锁定指定用户
     * @param userId
     * @return
     */
    boolean lockUser(Long userId);

    /**
     * 解锁指定用户
     * @param userId
     * @return
     */
    boolean unLockUser(Long userId);

    /**
     * 解锁用户登录重试锁定
     * @param loginId
     * @return
     */
    boolean unLockLoginRetry(String loginId);

    /**
     * 解锁用户登录重试锁定
     * @param userId
     * @return
     */
    boolean unLockLoginRetry(Long userId);

    /**
     * 查询指定用户权限列表
     * @param userId
     * @return
     */
    Set<String> selectUserPerms(Long userId);

    /**
     * 查询指定用户菜单列表
     * @param userId
     * @return
     */
    List<Menu> selectUserMenus(Long userId);

    /**
     * 查询指定用户角色Id列表
     * @param userId
     * @return
     */
    List<Long> selectUserRoleIdList(Long userId);

    /**
     * 新增用户
     * ps: 会新增相关联的角色记录
     * @param userVO
     * @return
     */
    boolean insertVO(UserVO userVO) throws Exception;

    /**
     * 更新用户
     * @param userVO
     * @return
     */
    boolean updateVO(UserVO userVO) throws Exception;

    /**
     * 删除用户
     * ps: 会删除其角色关联记录
     * @param userId
     * @return
     */
    boolean deleteUser(Long userId);

    /**
     * 批量删除用户
     * @param userIds
     * @return
     */
    boolean deleteUserByBatchId(List<Long> userIds);
}
